package database;

import java.util.LinkedList;
import java.util.Collections;
import java.util.Arrays;

/**
 * Puntajes máximos
 * @author Grupo 11 de Programacion Orientada a Objetos
 *
 */

public class Highscore {
	private LinkedList<Score> highscores = new LinkedList<Score>();
	
	/**
	 * Agrega si corresponde, el puntaje hecho por un usuario
	 * a los 10 mejores puntajes máximos.
	 * @param score - Información del usuario (nombre y puntaje)
	 * @return boolean - Informa si entró como top 10 o no.
	 */
	
	public boolean setHighScore(Score score){
	
			final Score auxscore;
			boolean added = false;
			
			/* Si el score hecho por un usuario es mayor a alguno de los 10,
			 * se agrega a la lista de puntajes maximos, quitandose el ultimo
			 */
			if (highscores.size() == 10) {
				auxscore = highscores.getFirst();
				if ( score.getScore() > auxscore.getScore()) {
					highscores.removeFirst();
					highscores.add(score);
					added = true;
				}
			} else {
				highscores.add(score);
				added = true; 
			}
			
			Collections.sort(highscores);
			return added;
	}
	
	/**
	 * Devuelve un arreglo con los 10 puntajes máximos
	 * ordenados de mayor a menor
	 * @return Score[] - Puntajes máximos
	 */
	
	public Score[] getHighScores() {
		Score[] auxscore = new Score[1];
		
		if (highscores.size() > 0) {
			auxscore = (highscores.toArray(auxscore));
			
			// reordena el arreglo de mayor a menor
			Arrays.sort(auxscore, Collections.reverseOrder());
			return auxscore;
		}
		
		return null;
	}
}
